package com.yuji.aacar.service;


import com.yuji.aacar.bean.request.AliGenJiFenRequest;
import com.yuji.aacar.bean.request.AliGenRequest;
import com.yuji.aacar.bean.request.BannerRequest;
import com.yuji.aacar.bean.request.GetAllBrandRequest;
import com.yuji.aacar.bean.request.GetDataVersionRequest;
import com.yuji.aacar.bean.request.GetMyCreditRequest;
import com.yuji.aacar.bean.request.GetRoomNameRequest;
import com.yuji.aacar.bean.request.GetSeriesListByNameRequest;
import com.yuji.aacar.bean.request.GetSeriesListRequest;
import com.yuji.aacar.bean.request.HotBrandRequest;
import com.yuji.aacar.bean.request.ImguploadRequest;
import com.yuji.aacar.bean.request.LogOutRequest;
import com.yuji.aacar.bean.request.LoginRequest;
import com.yuji.aacar.bean.request.ManagePersonalCarRequest;
import com.yuji.aacar.bean.request.ManagerCarAddressRequest;
import com.yuji.aacar.bean.request.MockRequest;
import com.yuji.aacar.bean.request.OrderDetailRequest;
import com.yuji.aacar.bean.request.OrderListRequest;
import com.yuji.aacar.bean.request.OrderSelectRequest;
import com.yuji.aacar.bean.request.PersonalCarListRequest;
import com.yuji.aacar.bean.request.QueryCarAddressRequest;
import com.yuji.aacar.bean.request.RegisterRequest;
import com.yuji.aacar.bean.request.ResetPasswordRequest;
import com.yuji.aacar.bean.request.RetrieveImageCodeRequest;
import com.yuji.aacar.bean.request.RetrieveTokenRequest;
import com.yuji.aacar.bean.request.SendShortMessageRequest;
import com.yuji.aacar.bean.request.SubmitRequest;
import com.yuji.aacar.bean.request.TokenRequest;
import com.yuji.aacar.bean.request.UpdateMemberRequest;
import com.yuji.aacar.bean.request.UpdatePersonalInfoRequest;
import com.yuji.aacar.bean.request.ValidatorCouponRequest;
import com.yuji.aacar.bean.request.ValidatorShortMessageRequest;
import com.yuji.aacar.bean.request.VersionRequest;
import com.yuji.aacar.bean.request.WashCarIndexRequest;
import com.yuji.aacar.bean.response.BannerResponse;
import com.yuji.aacar.bean.response.GetAllBrandResponse;
import com.yuji.aacar.bean.response.GetDataVersionResponse;
import com.yuji.aacar.bean.response.GetMyCreditResponse;
import com.yuji.aacar.bean.response.GetRoomNameResponse;
import com.yuji.aacar.bean.response.GetSeriesListResponse;
import com.yuji.aacar.bean.response.HotBrandResponse;
import com.yuji.aacar.bean.response.ImguploadResponse;
import com.yuji.aacar.bean.response.LogOutResponse;
import com.yuji.aacar.bean.response.LoginResponse;
import com.yuji.aacar.bean.response.ManagePersonalCarResponse;
import com.yuji.aacar.bean.response.ManagerCarAddressResponse;
import com.yuji.aacar.bean.response.OrderDetailResponse;
import com.yuji.aacar.bean.response.OrderListResponse;
import com.yuji.aacar.bean.response.OrderSelectResponse;
import com.yuji.aacar.bean.response.PersonalCarListResponse;
import com.yuji.aacar.bean.response.QueryCarAddressResponse;
import com.yuji.aacar.bean.response.RegisterResponse;
import com.yuji.aacar.bean.response.ResetPasswordResponse;
import com.yuji.aacar.bean.response.RetrieveTokenResponse;
import com.yuji.aacar.bean.response.SendShortMessageResponse;
import com.yuji.aacar.bean.response.SubmitResponse;
import com.yuji.aacar.bean.response.UpdatePersonalInfoResponse;
import com.yuji.aacar.bean.response.ValidatorCouponResponse;
import com.yuji.aacar.bean.response.ValidatorShortMessageResponse;
import com.yuji.aacar.bean.response.VersionResponse;
import com.yuji.aacar.bean.response.WashCarIndexResponse;
import com.yuji.aacar.net.annotaion.NOSECRET;
import com.yuji.aacar.net.bean.BaseResult;

import retrofit2.http.Body;
import retrofit2.http.POST;
import rx.Observable;

/**
 * <li>Package:com.ttp.boss.service
 * <li>Author: lining
 * <li>Date: 2017/2/21
 * <li>Description: 服务接口和url参数 （服务接口需要和baseServiceMediator方法保持一致）
 */

public interface BaseHttpApi {

    /*********************用户管理**********************/

    //会员登录
    @POST("/service/member/login/0")
    @NOSECRET
    Observable<BaseResult<LoginResponse>> login(@Body LoginRequest request);


    //忘记密码  废掉

    //用户注册
    @POST("/service/member/register/0")
    @NOSECRET
    Observable<BaseResult<RegisterResponse>> register(@Body RegisterRequest loginRequest);

    //修改密码
    @POST("/service/member/updatePersonalInfo/0")
    @NOSECRET
    Observable<BaseResult<UpdatePersonalInfoResponse>> updatePersonalInfo(@Body UpdatePersonalInfoRequest loginRequest);

    //用户注销
    @POST("/service/member/loginOut/0")
    @NOSECRET
    Observable<BaseResult<LogOutResponse>> loginOut(@Body LogOutRequest request);

    //重置密码
    @POST("/service/member/reset_passwd/0")
    @NOSECRET
    Observable<BaseResult<ResetPasswordResponse>> resetpassword(@Body ResetPasswordRequest request);

    //上传头像
    @POST("/service/imgupload/upload/0")
    @NOSECRET
    Observable<BaseResult<ImguploadResponse>> imgupload(@Body ImguploadRequest request);

    //保存用户信息
    @POST("/service/member/update_member/0")
    @NOSECRET
    Observable<BaseResult<String>> update_member(@Body UpdateMemberRequest request);

    //绑定divicetoken
    @POST("/service/member/update_devicetokens/0")
    @NOSECRET
    Observable<BaseResult<String>> update_devicetokens (@Body TokenRequest request);





    /*********************产品管理**********************/

    //查询产品价格
    @POST("/service/product/select/0")
    @NOSECRET
    Observable<BaseResult<OrderSelectResponse>> select(@Body OrderSelectRequest request);





    /*********************订单管理**********************/

    //提交订单
    @POST("/service/memberorder/submit/0")
    @NOSECRET
    Observable<BaseResult<SubmitResponse>> submit(@Body SubmitRequest request);

    //订单列表
    @POST("/service/memberorder/list/0")
    @NOSECRET
    Observable<BaseResult<OrderListResponse>> list(@Body OrderListRequest request);

    //订单详情
    @POST("/service/memberorder/detail/0")
    @NOSECRET
    Observable<BaseResult<OrderDetailResponse>> detail(@Body OrderDetailRequest request);

    //支付宝支付串
    @POST("/service/payorder/gen_alipay_paystr_order/0")
    @NOSECRET
    Observable<BaseResult<String>> gen_alipay_paystr(@Body AliGenRequest request);

    //支付宝异步回调-订单_mock
    @POST("/service/alipay_paycallback_order/mock")
    @NOSECRET
    Observable<BaseResult<String>> mock (@Body MockRequest request);

    //微信支付串
    @POST("/service/payorder/gen_weixin_paystr_order/0")
    @NOSECRET
    Observable<BaseResult<String>> gen_weixin_paystr_order(@Body AliGenRequest request);

    //取消订单
    @POST("/service/memberorder/cancel/0")
    @NOSECRET
    Observable<BaseResult<String>> cancel(@Body AliGenRequest request);

    //用户积分充值生成支付宝串
    @POST("/service/payorder/gen_alipay_paystr_order_uip/0")
    @NOSECRET
    Observable<BaseResult<String>> gen_alipay_paystr_order_uip(@Body AliGenJiFenRequest request);

    //用户积分充值生成支付宝串
    @POST("/service/payorder/gen_weixin_paystr_order_uip/0")
    @NOSECRET
    Observable<BaseResult<String>> gen_weixin_paystr_order_uip(@Body AliGenJiFenRequest request);




    /*********************通用模块**********************/

    //发送验证码
    @POST("/service/message/sendShortMessage/0")
    @NOSECRET
    Observable<BaseResult<SendShortMessageResponse>> sendshortmessage(@Body SendShortMessageRequest request);


    //验证验证码
    @POST("/service/message/validatorShortMessage/0")
    @NOSECRET
    Observable<BaseResult<ValidatorShortMessageResponse>> validatorshortmessage(@Body ValidatorShortMessageRequest request);

    //获取图片验证码
    @POST("/service/message/retrieveImageCode/0")
    @NOSECRET
    Observable<BaseResult<String>> retrieveImageCode(@Body RetrieveImageCodeRequest request);


    //校验手机号是否可以用


    //获取token
    @POST("/service/token/retrieveToken/0")
    @NOSECRET
    Observable<BaseResult<RetrieveTokenResponse>> retrieveToken(@Body RetrieveTokenRequest request);


    //获取token
    @POST(" /service/area/getRoomName/0")
    @NOSECRET
    Observable<BaseResult<GetRoomNameResponse>> getRoomName(@Body GetRoomNameRequest request);


    //    获取省
    //    获取市
    //    获取区


    //获取品牌列表
    @POST("/service/brand/getAllBrand/0")
    @NOSECRET
    Observable<BaseResult<GetAllBrandResponse>> getAllBrand (@Body GetAllBrandRequest request);


    //获取热门品牌
    @POST("/service/brand/getHotBrand/0")
    @NOSECRET
    Observable<BaseResult<HotBrandResponse>> getHotBrand(@Body HotBrandRequest request);


    // 获取车系
    @POST("/service/carSeries/getSeriesList/0")
    @NOSECRET
    Observable<BaseResult<GetSeriesListResponse>> getSeriesList(@Body GetSeriesListRequest request);

    // 根据品牌获取车系
    @POST("/service/carSeries/getSeriesByName/0")
    @NOSECRET
    Observable<BaseResult<GetSeriesListResponse>> getSeriesByName(@Body GetSeriesListByNameRequest request);

    //获取数据初始版本 获取最新的数据版本
    @POST("/service/version/getDataVersion/0")
    @NOSECRET
    Observable<BaseResult<GetDataVersionResponse>> getDataVersion(@Body GetDataVersionRequest request);


    //版本更新
    @POST("/service/version/compareAppVersion/0")
    @NOSECRET
    Observable<BaseResult<VersionResponse>> compareAppVersion(@Body VersionRequest request);


    //    数据字典管理
    //    数据字典列表


    /*********************首页**********************/

    //获取banner
    @POST("/service/banner/getHomePageBanner/0")
    @NOSECRET
    Observable<BaseResult<BannerResponse>> getHomePageBanner(@Body BannerRequest request);


    //填写订单
    //生成业务订单


    //校验优惠券密码是否正确
    @POST("/service/coupon/validatorCoupon/0")
    @NOSECRET
    Observable<BaseResult<ValidatorCouponResponse>> validatorCoupon(@Body ValidatorCouponRequest request);

    //获取天气洗车状况
    @POST("/service/washCarIndex/getWashIndex/0")
    @NOSECRET
    Observable<BaseResult<WashCarIndexResponse>> getWashIndex(@Body WashCarIndexRequest request);


    /*********************我的**********************/


    //    增加/修改/删除/洗车地址
    @POST("/service/personalController/managerCarAddress/0")
    @NOSECRET
    Observable<BaseResult<ManagerCarAddressResponse>> managerCarAddress(@Body ManagerCarAddressRequest request);

    //查看洗车地址列表
    @POST("/service/personalController/queryCarAddress/0")
    @NOSECRET
    Observable<BaseResult<QueryCarAddressResponse>> queryCarAddress(@Body QueryCarAddressRequest request);


    //车辆列表
    @POST("/service/personalcar/getPersonalCarList/0")
    @NOSECRET
    Observable<BaseResult<PersonalCarListResponse>> getPersonalCarList(@Body PersonalCarListRequest request);


    //增加、修改、删除车辆
    @POST("/service/personalcar/managePersonalCar/0")
    @NOSECRET
    Observable<BaseResult<ManagePersonalCarResponse>> managePersonalCar(@Body ManagePersonalCarRequest request);

    //获取用户积分余额
    @POST("/service/personalController/getMyCredit/0")
    @NOSECRET
    Observable<BaseResult<GetMyCreditResponse>> getMyCredit(@Body GetMyCreditRequest request);

}
